/**
 * 测试任务详情页面时间显示功能
 */

const { Pool } = require('pg')

const pool = new Pool({
  host: 'localhost',
  port: 5432,
  database: 'aide',
  user: 'postgres',
  password: process.env.POSTGRES_PASSWORD || 'unidt@123',
})

async function testTaskDetailTime() {
  const client = await pool.connect()
  
  try {
    console.log('🔍 测试任务详情页面时间显示...')
    
    // 1. 创建一个带时间和提醒间隔的测试任务
    console.log('\n📝 创建测试任务...')
    
    const testTask = {
      id: 'test-time-' + Date.now(),
      title: '测试时间显示任务',
      description: '用于测试任务详情页面的时间显示功能',
      due_date: '2024-12-25T15:30:00.000Z', // 包含具体时间
      reminder_minutes: 60, // 1小时提醒
      priority: 'P1',
      category: 'work',
      tags: ['测试'],
      user_id: 'admin-user-id', // 需要获取实际的管理员用户ID
      status: 'todo',
      board_position: 0
    }
    
    // 获取管理员用户ID
    const adminResult = await client.query(`
      SELECT id FROM users WHERE email = 'admin@aide.com'
    `)
    
    if (adminResult.rows.length === 0) {
      throw new Error('管理员用户不存在')
    }
    
    const adminUserId = adminResult.rows[0].id
    testTask.user_id = adminUserId
    
    // 插入测试任务
    await client.query(`
      INSERT INTO tasks (
        id, title, description, due_date, reminder_minutes, priority, category, tags, 
        user_id, status, board_position, created_at, updated_at
      ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, NOW(), NOW())
    `, [
      testTask.id, testTask.title, testTask.description, testTask.due_date, 
      testTask.reminder_minutes, testTask.priority, testTask.category, testTask.tags,
      testTask.user_id, testTask.status, testTask.board_position
    ])
    
    console.log(`✅ 测试任务已创建: ${testTask.id}`)
    
    // 2. 查询任务，验证数据存储
    console.log('\n🔍 验证任务数据存储...')
    
    const storedTask = await client.query(`
      SELECT id, title, due_date, reminder_minutes, priority, category, tags
      FROM tasks 
      WHERE id = $1
    `, [testTask.id])
    
    if (storedTask.rows.length === 0) {
      throw new Error('任务未找到')
    }
    
    const task = storedTask.rows[0]
    console.log('📊 存储的任务数据:')
    console.log(`  ID: ${task.id}`)
    console.log(`  标题: ${task.title}`)
    console.log(`  截止时间: ${task.due_date}`)
    console.log(`  提醒间隔: ${task.reminder_minutes} 分钟`)
    console.log(`  优先级: ${task.priority}`)
    console.log(`  分类: ${task.category}`)
    console.log(`  标签: ${JSON.stringify(task.tags)}`)
    
    // 3. 解析时间字段（模拟前端逻辑）
    console.log('\n⚙️ 模拟前端时间解析...')
    
    let dueDate = ''
    let dueTime = ''
    
    if (task.due_date) {
      const dateTime = new Date(task.due_date)
      if (!isNaN(dateTime.getTime())) {
        dueDate = dateTime.toISOString().split('T')[0] // YYYY-MM-DD
        dueTime = dateTime.toTimeString().slice(0, 5) // HH:mm
      }
    }
    
    console.log('📅 解析结果:')
    console.log(`  日期: ${dueDate}`)
    console.log(`  时间: ${dueTime}`)
    console.log(`  提醒: 提前 ${task.reminder_minutes < 60 ? `${task.reminder_minutes}分钟` : 
                                task.reminder_minutes === 60 ? '1小时' : 
                                task.reminder_minutes === 120 ? '2小时' : 
                                task.reminder_minutes === 1440 ? '1天' : 
                                '30分钟'} 提醒`)
    
    // 4. 测试任务详情页面需要显示的内容
    console.log('\n📱 任务详情页面应该显示:')
    console.log(`  截止时间: ${dueDate} ${dueTime}`)
    console.log(`  具体时间: ⏰ ${dueTime}`)
    console.log(`  提醒设置: 提前 ${task.reminder_minutes === 60 ? '1小时' : task.reminder_minutes + '分钟'} 提醒`)
    
    // 5. 清理测试数据
    await client.query('DELETE FROM tasks WHERE id = $1', [testTask.id])
    console.log('\n🧹 测试数据已清理')
    
    console.log('\n✅ 任务详情时间显示测试完成')
    console.log('\n📋 需要在TaskDetailPage.tsx中实现:')
    console.log('1. ✅ Task接口添加dueTime和reminderMinutes字段 (已完成)')
    console.log('2. ✅ 任务加载时解析时间字段 (已完成)')
    console.log('3. ❌ 时间和提醒间隔的显示组件 (待完成)')
    console.log('4. ❌ 编辑模式的时间和提醒设置 (待完成)')
    console.log('5. ❌ 保存时合并日期和时间字段 (待完成)')
    
    return true
    
  } catch (error) {
    console.error('❌ 测试失败:', error.message)
    return false
  } finally {
    client.release()
  }
}

// 运行测试
testTaskDetailTime()
  .then((success) => {
    if (success) {
      console.log('\n🎉 测试通过，数据层面工作正常')
      console.log('现在需要完成前端页面的显示逻辑')
    } else {
      console.log('\n❌ 测试失败，需要修复数据层问题')
    }
    process.exit(success ? 0 : 1)
  })
  .catch((error) => {
    console.error('测试执行失败:', error)
    process.exit(1)
  })
